package Capa_Modelo;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Query;

import Capa_Datos.CD_Curso;
import Capa_Datos.CD_Horario;
import Capa_Datos.CD_Laboratorio;

public class CM_ImplGeneracionHorariosDAO extends CM_BaseDao implements CM_GeneracionHorariosDAO{

	public CM_ImplGeneracionHorariosDAO(){
		super();
		
	}
	
	@Override
	public List<CD_Horario> obtenerHorarios(int curso) {
		List<CD_Horario> lista_horarios;
		try{
			
			lista_horarios= new ArrayList<CD_Horario>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT b FROM CD_Horario b WHERE b.grupo.curso.idCurso =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",curso);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
			lista_horarios=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_horarios;			
	}

	@Override
	public List<CD_Laboratorio> cargarLaboratoriosDisponibles() {
		List<CD_Laboratorio> lista_laboratorios;
		try{
			
			lista_laboratorios= new ArrayList<CD_Laboratorio>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Laboratorio a WHERE a.unidad =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",null);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
			lista_laboratorios=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_laboratorios;
	}

	@Override
	public void actualizarHorario(CD_Horario horario, int num_laboratorio) {
		CD_Horario horario_m = new CD_Horario();
		CD_Laboratorio laboratorio = new CD_Laboratorio();
		List<CD_Laboratorio> lista_laboratorios= new ArrayList<CD_Laboratorio>();
		
		try{						
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Laboratorio a WHERE a.idLaboratorio =: codigo");			
			q.setParameter("codigo",num_laboratorio);	
			lista_laboratorios=q.getResultList();
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR777--->"+e);						
		}
		
		laboratorio=lista_laboratorios.get(0);
		try{
			
			
			
			horario_m=em.find(CD_Horario.class, horario.getIdHorario());
			horario_m.setLaboratorio(laboratorio);
			em.merge(horario_m);		    
		    
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR888--->"+e);
			
			
		}
		
	}

	@Override
	public List<CD_Horario> obtenerHorariosDia(String dia) {
		List<CD_Horario> lista_horarios = new ArrayList<CD_Horario>();
		
		try{
						
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Horario a WHERE a.dia =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",dia);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
			lista_horarios=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_horarios;
	
	}
	
}
